package utils

import (
	"fmt"
	"log"
	"os"
	"path/filepath"
	"time"
)

var (
	InfoLogger  *log.Logger
	ErrorLogger *log.Logger
	DebugLogger *log.Logger
)

// InitLogger 初始化日志系统
func InitLogger() error {
	// 创建 logs 目录
	logDir := "logs"
	if _, err := os.Stat(logDir); os.IsNotExist(err) {
		os.MkdirAll(logDir, 0755)
	}

	// 生成日志文件名
	timestamp := time.Now().Format("2006-01-02")
	infoLogPath := filepath.Join(logDir, fmt.Sprintf("info-%s.log", timestamp))
	errorLogPath := filepath.Join(logDir, fmt.Sprintf("error-%s.log", timestamp))
	debugLogPath := filepath.Join(logDir, fmt.Sprintf("debug-%s.log", timestamp))

	// 打开日志文件（追加模式）
	infoFile, err := os.OpenFile(infoLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		return fmt.Errorf("无法打开信息日志文件: %v", err)
	}

	errorFile, err := os.OpenFile(errorLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		return fmt.Errorf("无法打开错误日志文件: %v", err)
	}

	debugFile, err := os.OpenFile(debugLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		return fmt.Errorf("无法打开调试日志文件: %v", err)
	}

	// 创建日志记录器
	InfoLogger = log.New(infoFile, "[INFO] ", log.LstdFlags|log.Lshortfile)
	ErrorLogger = log.New(errorFile, "[ERROR] ", log.LstdFlags|log.Lshortfile)
	DebugLogger = log.New(debugFile, "[DEBUG] ", log.LstdFlags|log.Lshortfile)

	// 同时输出到控制台
	InfoLogger.SetOutput(os.Stdout)
	ErrorLogger.SetOutput(os.Stderr)

	// 输出启动信息
	InfoLogger.Printf("日志系统初始化成功")
	return nil
}

// Info 记录信息日志
func Info(format string, v ...interface{}) {
	if InfoLogger != nil {
		InfoLogger.Printf(format, v...)
	}
}

// Error 记录错误日志
func Error(format string, v ...interface{}) {
	if ErrorLogger != nil {
		ErrorLogger.Printf(format, v...)
	}
}

// Debug 记录调试日志
func Debug(format string, v ...interface{}) {
	if DebugLogger != nil {
		DebugLogger.Printf(format, v...)
	}
}
